[개발상식] 프레임워크(Framework)와 라이브러리(Library)의 차이

업데이트:



프레임워크와 라이브러리의 차이


"라이브러리와 프레임워크의 차이가 뭔지 알아요?"


"음.. 라이브러리는 그냥 메소드같은걸 갖다 쓰는거고.. 프레임워크는 틀?"


"스프링은 라이브러리 일까요 프레임워크일까요?"


"음.. 프레임워크?"

"최근에 사용한 라이브러리와 프레임워크는 뭐에요?"


"..."


개발자로 공부하다보면 라이브러리, 프레임워크 라는 용어를 정말 많이 듣고 사용하는데 정작 라이브러리와 프레임워크의 정확한 정의는 무엇인지, 무슨 차이가 있는지는 모른채 혼용하여 사용하는 경우가 많다. 위의 짤막한 인터뷰 내용은 실제 필자가 인턴 근무 하는 중 받은 질문이였고, 질문에 대답하지 못했다. 그래서 오늘은 라이브러리와 프레임워크의 정의와 기능, 예시, 차이점을 정리해서 포스팅 해보고자 한다! 참고로 기술면접에서도 자주 등장하는 질문이니 자세히 정확하게 알아두는게 좋다!







✅ 프레임워크(Framework)란?

원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 기능을 갖추고 있는 골격, 뼈대를 의미합니다.

프레임워크는 애플리케이션 개발 시 필수적인 코드, 알고리즘, DB연동과 같은 기능을 위해 어느정도 구조(뼈대)를 제공하고, 이러한 구조위에서 사용자가 코드를 작성해서 애플리케이션을 개발 합니다.

앱/서버 등의 구동, 메모리관리, 이벤트 루프 등 공통된 부분은 프레임워크가 관리하고, 사용자는 프레임워크가 정해준 방식대로 클래스, 메소드를 구현하면 됩니다.

한마디로 소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합 이라고 볼 수 있습니다.



📌 프레임워크의 기능


  1. 코드 재사용성 : 프레임워크는 공통 기능을 제공하여 코드 재사용에 용이합니다.
  2. 일정한 구조 제공 : 프레임워크는 애플리케이션의 구조를 정의하여 개발자가 그 구조를 따르도록 합니다.
  3. 모듈화 : 프레임워크는 기능을 모듈화하여 독립적인 컴포넌트로 나눌 수 있게 합니다.
  4. 생산성 향상 : 반복적인 작업을 자동화하고 개발 생산성을 높입니다.
  5. 유지보수성 : 일관된 코드 구조를 유지하여 유지보수성을 향상시킵니다.



📌 프레임워크 예시


  • JAVA 서버 개발에 사용되는 Spring Framework
  • Python 서버 개발에 사용되는 Django, Flask
  • 안드로이드 앱 개발에 사용되는 Android
  • 웹 개발에 사용되는 Angular, Vue.js
  • JAVA 기반의 JSP를 위한 Struts







✅ 라이브러리(Library)란?

라이브러리는 단순 활용가능한 도구들의 집합을 말합니다.

소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임 입니다.

미리 작성된 코드, 변수, 함수, 클래스가 포함됩니다.



📌 라이브러리의 기능


  1. 코드 재사용성: 라이브러리는 특정 작업을 처리하는 코드의 재사용을 촉진합니다.
  2. 추상화: 복잡한 작업을 간단한 함수 호출로 추상화합니다.
  3. 모듈화: 라이브러리는 기능별로 모듈화되어 필요에 따라 가져다 쓸 수 있습니다.
  4. 유연성: 개발자가 필요에 따라 라이브러리를 선택하여 사용할 수 있습니다.



📌 라이브러리 예시


  • TensorFlow: 머신러닝과 딥러닝을 위한 Python 라이브러리.
  • Pandas: 데이터 분석과 조작을 위한 Python 라이브러리.
  • NumPy: 수치 계산을 위한 Python 라이브러리.
  • jQuery: HTML 문서 탐색 및 조작, 이벤트 처리, 애니메이션, Ajax를 쉽게 처리할 수 있게 하는 JavaScript 라이브러리.
  • Lodash: JavaScript 유틸리티 라이브러리로서 배열, 객체, 문자열 등 다양한 작업을 편리하게 처리할 수 있게 해줍니다.







✅ 프레임워크와 라이브러리의 차이점

📌 제어의 역전 (Inversion of Control)


라이브러리와 프레임워크의 가장 큰 차이는 제어 흐름에 대한 주도성이 누구에게/어디에 있는가에 있습니다. 즉, 어플리케이션의 Flow(흐름)를 누가 쥐고 있느냐에 달려있습니다.

프레임워크전체적인 흐름을 프레임워크가 쥐고 있으며 사용자는 그 안에 필요한 코드를 짜 넣으면 되고, 반면에 라이브러리사용자가 전체적인 흐름을 직접 만들고 필요에 따라 라이브러리를 가져다가 쓰는 것이라고 할 수 있습니다.

한마디로 프레임워크그 틀안에 제어 흐름에 대한 주도성이 내포되어 있고, 라이브러리사용자가 전적으로 제어 흐름에 대한 주도성을 가집니다.



📌 구조 제공 유무


프레임워크는 전체 어플리케이션의 구조를 정의하여 일정한 개발 패턴을 따르게끔 합니다. 앞서 말한 제어 흐름을 가지고 있다는 것과 거의 유사한 의미입니다.

그러나 라이브러리는 특정 기능만을 제공할 뿐 어플리케이션의 전체 구조에는 관여하지 않습니다. 사용하는 개발자 스스로 원하는 방식으로 구조를 설계할 수 있습니다.



⚠️ 프레임워크 : 프레임워크가 흐름을 제어하고 사용자가 만든 코드를 사용 (제어의 역전)

⚠️ 라이브러리 : 사용자가 흐름을 제어하고 라이브러리를 가져다 사용







✅ 결론

프레임워크와 라이브러리는 각각의 장단점이 있으며, 특정 상황과 요구에 따라 선택하여 사용합니다. 프레임워크는 애플리케이션의 구조와 흐름을 제어하며, 일관된 개발 패턴을 제공합니다. 반면에 라이브러리는 특정 기능을 쉽게 사용할 수 있도록 도와주며, 개발자가 전체 흐름을 제어할 수 있게 합니다.

댓글남기기